Domingo de Dados (Abraji)
Introdução à programação em R com dados eleitorais
Olá!!
Ana Carolina Moreno: Diretora da Abraji e Jornalista de Dados. Co-organiza a R-Ladies São Paulo. Jade Maré: Head de Transformação Digital no Greenpeace Brasil. Co-organiza a R-Ladies São Paulo.
Cronograma previsto
Parte 1 (domingo 9h-11h): Introdução R + RStudio + ciência de dados + Tidyverse Parte 2 (domingo 11h30-13h): Importação e análise dos dados escrevendo os primeiros códigos
Você deveria estar aqui hoje?
Você se enquadra em uma das situações abaixo?
Não sei nada sobre R, mas sei outras linguagens
Não conheço nada de nenhuma linguagem de programação
Já tentei aprender R no passado, mas esqueci tudo
Sei só um básico de Excel
Nunca mexi no Excel
Acho que sou “de humanas demais” pra saber programar
Sempre fiquei de recuperação em matemática no colégio
Quero sempre aprender coisas novas
Então a resposta é SIM!
Vamos nessa!
=> Introdução
1- Por que jornalistas aprendem a programar?
2- Que tipo de bases de dados podemos usar no R?
3- Quais termos preciso aprender?
4- O que conseguimos fazer com essas bases no R?
1- Jornalistas + programação
Resposta: porque nem todas as bases abrem no Excel
1.1- Os limites do Excel
Limite do Excel: 1.048.576 linhas e 16.384 colunas Para efeito de comparação…
Base de SRAG do Sivep-Gripe só do ano de 2021 (atualizado até fev/2022): 1.715.835 linhas
Base do Enem 2018: 5,5 milhões de linhas (uma linha por pessoa inscrita)
Base de beneficiários do Auxílio Emergencial: 40 milhões de linhas novas a cada mês
2- As bases de dados e o R
Podemos usar bases que tenham formato de “tabela”:
cada linha é um registro, e cada coluna traz algum detalhe sobre aquele registro
as colunas ou linhas não estão mescladas ou agrupadas
em geral, são os arquivos do poder público salvos no formato .csv (mas nem sempre)
2.1 - Exemplo de base de dados
Eleição para a Alesp em 2022:
1
EDUARDO SUPLICY
PT
807015
NA
MASCULINO
SUPERIOR COMPLETO
BRANCA
VEREADOR
2
CARLOS GIANNAZI
PSOL
276811
218705
MASCULINO
SUPERIOR COMPLETO
BRANCA
DEPUTADO
3
PAULA DA BANCADA FEMINISTA
PSOL
259771
NA
FEMININO
SUPERIOR COMPLETO
PRETA
ADVOGADO
4
BRUNO ZAMBELLI
PL
235305
NA
MASCULINO
SUPERIOR COMPLETO
BRANCA
OUTROS
5
MAJOR MECCA
PL
224462
131531
MASCULINO
SUPERIOR COMPLETO
BRANCA
DEPUTADO
6
TOMÉ ABDUCH
REP
221656
NA
MASCULINO
SUPERIOR COMPLETO
BRANCA
ENGENHEIRO
3- Breve glossário
Data frame : sinônimo para “tabela” ou “planilha”
Tibble : idem acima
Objeto : é um data frame criado dentro do RStudio
Observação : é sinônimo de “linha” na sua tabela
Variável : é sinônimo de “coluna” na sua tabela
4- Potencial do R
Abrir uma base de dados
Limpar a base de dados (ex: formatar uma data ou tirar os acentos dos nomes)
Transformar a base de dados (ex: a partir da coluna de data, criar uma coluna nova só com o mês)
Visualizar os dados em formatos de gráficos ou mapas (ou mesmo relatórios em PDF ou websites)
Etc. etc. etc.
=> Conceitos iniciais de programação
1- Operador de atribuição: <-
(pense nele como uma preposição !)
É como criamos objetos para guardar valores.
Atalho: ALT + MENOS
Exemplo: calculando a duração desse bootcamp.
total_sessoes <- 2
duracao_sessao_min <- 90
duracao_total <- total_sessoes * duracao_sessao_min
duracao_total
2- O que pode ser um “valor”
(pense neles como substantivos !)
Valores não precisam ser números.
Eles podem ser texto, por exemplo.
Porém, precisam ser escritos entre aspas.
Nesse caso, o R entende que o objeto é da classe de “character”
nomes_intrutoras <- "Carol + Jade"
nomes_intrutoras
2.1 - As classes dos objetos
Os objetos podem ter vários tipos (um texto, um número etc.). É o que chamamos de classe .
As classes principais são:
character
texto, string, caractere
numeric
número, double, valor real, integer
logic
lógico, booleano, valor TRUE/FALSE
2.2- Exemplos de classes
character: “Carol” / “43” / “verdadeiro”
numeric: -5 / 1.5 / 3.1416
logic: TRUE / FALSE
3- Operadores relacionais
==
igual
!=
diferente
>
maior
<
menor
>=
maior ou igual a
<=
menor ou igual que
4- Operadores lógicos
!
significa NÃO
&
significa E
|
significa OU
%in%
significa “contém”
5- O operador pipe: %>% ou |>
(pense nele como uma vírgula !)
pipe = cano, encanamento, fazer a informação fluir
o valor do lado esquerdo do pipe vira argumento para a função do lado direito e assim por diante
6- O que é uma função?
Função: uma palavra que, no código, dá um comando ao computador.
Ela é escrita seguida de parênteses.
Nos parênteses incluímos os atributos (inputs).
O output vai ser a informação que o computador retorna após rodar a função.
(pense nela como um verbo !)
6.1- Função no Excel
Versão no Excel
6.2- Função no R
altura_carol <- 1.54
altura_oscar_schmidt <- 2.06
altura_michael_jordan <- 1.98
altura_media <- mean (c (altura_carol, altura_oscar_schmidt, altura_michael_jordan))
altura_media
mean = função para calcular a média
argumentos = informações que vão entre parênteses para indicar o que a função deve fazer
c() = para criar um vetor (uma lista com mais de um item a ser aplicado no cálculo)
7- O que é um pacote de R?
Conjunto de funções úteis pra determinada análise.
Eles são disponibilizados em repositórios. Os dois principais repositórios são o CRAN e o GitHub .
Os pacotes são instalados apenas uma vez e devem ser carregados sempre que queremos utilizá-los.
7.1 - Instalar e carregar pacotes
Para instalar um pacote que está no CRAN, usamos a função install.packages:
install.packages(“tidyverse”)
Caso o pacote esteja no GitHub, é possível fazer a instalação via função install_github do pacote devtools:
install.packages(“devtools”)
devtools::install_github(‘rfsaldanha/microdatasus’)
Para carregar o pacote usamos a função library:
library(tidyverse) library(microdatasus)
8- Boas práticas (resumo)
Nome de variáveis:
Não usar maiúscula, espaços ou acentos pra criar o nome
Não começar o nome com um número
Escolher nomes úteis e não redundantes
Código e comentários:
Inserir espaços só após as vírgulas e parênteses
Evite comentar demais e de menos (com a hashtag #)
Use a quebra de linha para facilitar a leitura
9- Erros mais comuns!
Rodar uma linha de código sem ter rodado as anteriores, que fazem parte de uma “sequência” de comandos para o programa
Esquecer de salvar valores ou tabelas em objetos
Pequenos erros de digitação ao escrever o código
Não selecionar o trecho inteiro de código na hora de rodar
Dica: o pacote tidylog te dá um relatório de tudo o que ele fez, e ajuda a encontrar a origem dos erros
Tidyverse
1- O que é?
Um conjunto de pacotes que compartilham a mesma gramática e estrutura.
Quando você instala/carrega o tidyverse, todos esses pacotes vêm junto de uma vez.
Serve pra fazer o trabalho de análise mais rápido e fácil
2- Pacotes dentro do Tidyverse
São muitos (https://www.tidyverse.org/packages/ ) Os mais úteis para o DDJ são os seguintes:
readr: abrir arquivos (bases de dados) e salvar tabelas
dplyr: manipular a base (filtrar, criar colunas, agrupar, resumir, ordenar etc.)
stringr: arrumar textos (string) identifcando padrões (regex)
lubridate: ajusta datas e horas (ex: AAAA-MM-DD)
ggplot2: visualização de dados
magrittr: para usar o pipe nos seus códigos
3- ‘Verbos mágicos’ do Tidyverse
Saber poucos comandos já basta pra começar a analisar!
select
seleciona só algumas colunas da base
filter
seleciona só algumas linhas da base
mutate
cria colunas ou altera valores de uma coluna
group_by
agrupa linhas de valores iguais em uma coluna
summarise
par do group_by, cria o resumo desses grupos
arrange
ordena a forma de visualizar a tabela
4- Mais ‘verbos úteis’
read.csv
abre o seu arquivo separado por vírgula
read.csv2
arquivo separado por ponto e vírgula
write.csv
salva a tabela num arquivo no computador
rename
renomeia uma coluna
replace *
troca um valor p/ outro quando ele aparece
pivot *
transforma linhas em colunas e vice-versa
bind_rows *
junta as linhas de duas tabelas diferentes
str_sub *
puxa só parte do valor de uma coluna
Pergunta 1:
Quais mulheres foram eleitas em 2022? (Dica: é com “select” ou com “filter” ?)
Código 1:
Quais mulheres foram eleitas em 2022?
library (tidyverse)
alesp <- read.csv2 ("data/alesp.csv" ,
fileEncoding = "Windows-1252" )
sexo_feminino <- alesp |>
filter (genero == "FEMININO" )
Resposta 1:
Quais mulheres foram eleitas em 2022?
3
PAULA DA BANCADA FEMINISTA
PSOL
259771
NA
FEMININO
SUPERIOR COMPLETO
PRETA
ADVOGADO
10
ANA CAROLINA SERRA
CID
198698
NA
FEMININO
SUPERIOR COMPLETO
BRANCA
ADVOGADO
13
BRUNA FURLAN
PSDB
195436
NA
FEMININO
SUPERIOR COMPLETO
BRANCA
DEPUTADO
18
CARLA MORANDO
PSDB
177773
89636
FEMININO
SUPERIOR COMPLETO
BRANCA
EMPRESÁRIO
20
EDIANE MARIA
PSOL
175617
NA
FEMININO
LÊ E ESCREVE
PRETA
EMPREGADO DOMÉSTICO
21
MARTA COSTA
PSD
170541
117156
FEMININO
SUPERIOR COMPLETO
BRANCA
SERVIDOR PÚBLICO ESTADUAL
23
PROFESSORA BEBEL
PT
155983
87169
FEMININO
SUPERIOR COMPLETO
BRANCA
DEPUTADO
30
VALERIA BOLSONARO
PL
131557
54519
FEMININO
SUPERIOR COMPLETO
BRANCA
DEPUTADO
39
MARCIA LIA
PT
108587
63751
FEMININO
SUPERIOR COMPLETO
BRANCA
DEPUTADO
41
MONICA DO MOVIMENTO PRETAS
PSOL
106781
149844
FEMININO
SUPERIOR COMPLETO
PRETA
JORNALISTA E REDATOR
50
THAINARA FARIA
PT
91388
NA
FEMININO
SUPERIOR COMPLETO
PRETA
VEREADOR
53
LECI BRANDÃO
PCdoB
90496
64487
FEMININO
ENSINO MÉDIO COMPLETO
PRETA
CANTOR E COMPOSITOR
55
ANALICE FERNANDES
PSDB
90135
110089
FEMININO
SUPERIOR COMPLETO
BRANCA
ENFERMEIRO
56
ANDRÉA WERNER
PSB
88820
NA
FEMININO
SUPERIOR COMPLETO
BRANCA
JORNALISTA E REDATOR
60
MARINA HELOU
REDE
85517
39839
FEMININO
SUPERIOR COMPLETO
BRANCA
DEPUTADO
63
EDNA MACEDO
REP
82932
84144
FEMININO
ENSINO MÉDIO COMPLETO
BRANCA
DEPUTADO
67
SOLANGE FREITAS
UNIÃO
81870
NA
FEMININO
SUPERIOR COMPLETO
BRANCA
JORNALISTA E REDATOR
69
DANI ALONSO
PL
80337
NA
FEMININO
SUPERIOR COMPLETO
BRANCA
EMPRESÁRIO
70
ANA PERUGINI
PT
79061
NA
FEMININO
SUPERIOR COMPLETO
BRANCA
SERVENTUÁRIO DE JUSTIÇA
79
DELEGADA GRACIELA
PL
68955
63089
FEMININO
SUPERIOR COMPLETO
BRANCA
DEPUTADO
80
LETÍCIA AGUIAR
PP
68556
60909
FEMININO
SUPERIOR INCOMPLETO
BRANCA
OUTROS
81
MARIA LUCIA AMARY
PSDB
66956
70743
FEMININO
SUPERIOR COMPLETO
BRANCA
DEPUTADO
82
FABIANA B.
PL
65497
NA
FEMININO
SUPERIOR COMPLETO
PARDA
EMPRESÁRIO
83
BETH SAHÃO
PT
65407
54900
FEMININO
SUPERIOR COMPLETO
BRANCA
OUTROS
87
CLARICE GANEM
PODE
59342
NA
FEMININO
SUPERIOR COMPLETO
BRANCA
ADMINISTRADOR
Pergunta 2:
Qual foi a média de votos em 2022 por raça?
Código 2:
Qual foi a média de votos em 2022 por raça?
media_raca <- alesp |>
group_by (cor_raca) |>
summarise (media_votos = mean (votos_2022))
Resposta 2:
Qual foi a média de votos em 2022 por raça?
BRANCA
125135.7
PARDA
105330.0
PRETA
129313.1
Pergunta 3:
Qual é o ranking de votos totais por partido em 2022?
Código 3:
Qual é o ranking de votos totais por partido em 2022?
Agrupamos por raça. OBS: Por que só aparecem três raças?
votos_partidos <- alesp |>
group_by (sigla_partido) |>
summarise (total_votos = sum (votos_2022)) |>
arrange (desc (total_votos))
Resposta 3:
Qual é o ranking de votos totais por partido em 2022?
Agrupamos por partido!
PL
2659415
PT
2572961
PSDB
1063131
REP
929898
UNIÃO
891227
PSOL
864074
PSD
488167
MDB
424436
PP
353342
PODE
320828
CID
275608
PSB
244817
PSC
123592
NOVO
90688
PCdoB
90496
REDE
85517
PDT
85195
SD
58707
Pergunta 4:
Qual deputado reeleito ganhou mais votos de 2018 para 2022?
Código 4:
Qual deputado reeleito ganhou mais votos de 2018 para 2022?
(Não precisamos agrupar por candidato, já que eles são únicos!)
deputados <- alesp |>
filter (! is.na (votos_2018)) |>
mutate (variacao_votos = votos_2022 - votos_2018,
pct_variacao_votos = ( variacao_votos * 100 ) / votos_2018) |>
arrange (desc (pct_variacao_votos))
Resposta 4:
Qual deputado reeleito ganhou mais votos de 2018 para 2022?
8
TENENTE COIMBRA
PL
209705
24109
MASCULINO
SUPERIOR COMPLETO
BRANCA
DEPUTADO
185596
769.8203990
48
AGENTE FEDERAL DANILO BALAS
PL
94552
38661
MASCULINO
SUPERIOR COMPLETO
BRANCA
DEPUTADO
55891
144.5668762
30
VALERIA BOLSONARO
PL
131557
54519
FEMININO
SUPERIOR COMPLETO
BRANCA
DEPUTADO
77038
141.3048662
22
EMÍDIO DE SOUZA
PT
157834
65898
MASCULINO
SUPERIOR COMPLETO
BRANCA
DEPUTADO
91936
139.5125800
16
MARCOS DAMASIO
PL
183219
81695
MASCULINO
SUPERIOR COMPLETO
BRANCA
DEPUTADO
101524
124.2719873
61
MARCIO NAKASHIMA
PDT
85195
38081
MASCULINO
SUPERIOR COMPLETO
BRANCA
DEPUTADO
47114
123.7204905
15
ITAMAR BORGES
MDB
183480
82185
MASCULINO
SUPERIOR COMPLETO
BRANCA
DEPUTADO
101295
123.2524183
60
MARINA HELOU
REDE
85517
39839
FEMININO
SUPERIOR COMPLETO
BRANCA
DEPUTADO
45678
114.6564924
18
CARLA MORANDO
PSDB
177773
89636
FEMININO
SUPERIOR COMPLETO
BRANCA
EMPRESÁRIO
88137
98.3276808
34
VINICIUS CAMARINHA
PSDB
123316
65441
MASCULINO
SUPERIOR COMPLETO
BRANCA
ADVOGADO
57875
88.4384407
11
MILTON LEITE FILHO
UNIÃO
198429
105492
MASCULINO
ENSINO MÉDIO COMPLETO
PARDA
DEPUTADO
92937
88.0986236
23
PROFESSORA BEBEL
PT
155983
87169
FEMININO
SUPERIOR COMPLETO
BRANCA
DEPUTADO
68814
78.9432023
7
ANDRÉ DO PRADO
PL
216268
123313
MASCULINO
SUPERIOR COMPLETO
BRANCA
DEPUTADO
92955
75.3813467
5
MAJOR MECCA
PL
224462
131531
MASCULINO
SUPERIOR COMPLETO
BRANCA
DEPUTADO
92931
70.6533061
39
MARCIA LIA
PT
108587
63751
FEMININO
SUPERIOR COMPLETO
BRANCA
DEPUTADO
44836
70.3298772
33
THIAGO AURICCHIO
PL
123483
73435
MASCULINO
SUPERIOR COMPLETO
BRANCA
DEPUTADO
50048
68.1527882
27
LUIZ FERNANDO
PT
141017
85271
MASCULINO
SUPERIOR INCOMPLETO
BRANCA
EMPRESÁRIO
55746
65.3750982
14
CAPITÃO CONTE LOPES
PL
192454
116806
MASCULINO
SUPERIOR COMPLETO
BRANCA
DEPUTADO
75648
64.7637964
26
ENIO TATTO
PT
142785
86744
MASCULINO
SUPERIOR COMPLETO
BRANCA
DEPUTADO
56041
64.6050447
36
RAFAEL SILVA
PSD
118182
71992
MASCULINO
SUPERIOR COMPLETO
BRANCA
DEPUTADO
46190
64.1599067
28
ROGÉRIO NOGUEIRA
PSDB
139756
89040
MASCULINO
ENSINO MÉDIO COMPLETO
BRANCA
EMPRESÁRIO
50716
56.9586703
17
CARLOS CEZAR
PL
180690
115566
MASCULINO
SUPERIOR COMPLETO
BRANCA
DEPUTADO
65124
56.3522143
21
MARTA COSTA
PSD
170541
117156
FEMININO
SUPERIOR COMPLETO
BRANCA
SERVIDOR PÚBLICO ESTADUAL
53385
45.5674485
42
CARLÃO PIGNATARI
PSDB
105245
74006
MASCULINO
ENSINO MÉDIO COMPLETO
BRANCA
EMPRESÁRIO
31239
42.2114423
53
LECI BRANDÃO
PCdoB
90496
64487
FEMININO
ENSINO MÉDIO COMPLETO
PRETA
CANTOR E COMPOSITOR
26009
40.3321600
44
SEBASTIÃO SANTOS
REP
104374
75280
MASCULINO
SUPERIOR COMPLETO
PARDA
DEPUTADO
29094
38.6477152
37
PAULO FIORILO
PT
110251
80430
MASCULINO
SUPERIOR COMPLETO
BRANCA
DEPUTADO
29821
37.0769613
85
PAULO CORRÊA JR
PSD
62239
46438
MASCULINO
SUPERIOR COMPLETO
BRANCA
JORNALISTA E REDATOR
15801
34.0260132
66
DR. JORGE DO CARMO
PT
82054
61751
MASCULINO
SUPERIOR COMPLETO
BRANCA
DEPUTADO
20303
32.8788198
2
CARLOS GIANNAZI
PSOL
276811
218705
MASCULINO
SUPERIOR COMPLETO
BRANCA
DEPUTADO
58106
26.5682083
9
DELEGADO OLIM
PP
201348
161569
MASCULINO
SUPERIOR COMPLETO
BRANCA
DEPUTADO
39779
24.6204408
71
MAURO BRAGATO
PSDB
78142
65475
MASCULINO
SUPERIOR COMPLETO
BRANCA
DEPUTADO
12667
19.3463154
83
BETH SAHÃO
PT
65407
54900
FEMININO
SUPERIOR COMPLETO
BRANCA
OUTROS
10507
19.1384335
40
BARBA
PT
108071
91394
MASCULINO
SUPERIOR INCOMPLETO
PRETA
DEPUTADO
16677
18.2473685
52
RICARDO MADALENA
PL
90630
77554
MASCULINO
SUPERIOR COMPLETO
BRANCA
DEPUTADO
13076
16.8605101
47
GILMACI SANTOS
REP
96361
82678
MASCULINO
SUPERIOR INCOMPLETO
PARDA
DEPUTADO
13683
16.5497472
45
ALTAIR MORAES
REP
98515
86230
MASCULINO
SUPERIOR COMPLETO
PARDA
DEPUTADO
12285
14.2467819
80
LETÍCIA AGUIAR
PP
68556
60909
FEMININO
SUPERIOR INCOMPLETO
BRANCA
OUTROS
7647
12.5547949
79
DELEGADA GRACIELA
PL
68955
63089
FEMININO
SUPERIOR COMPLETO
BRANCA
DEPUTADO
5866
9.2979759
65
LEO OLIVEIRA
MDB
82145
76703
MASCULINO
SUPERIOR INCOMPLETO
BRANCA
EMPRESÁRIO
5442
7.0948985
19
JORGE WILSON XERIFE CONSUMIDOR
REP
177614
177414
MASCULINO
SUPERIOR COMPLETO
BRANCA
JORNALISTA E REDATOR
200
0.1127307
75
RODRIGO MORAES
PL
75094
75845
MASCULINO
SUPERIOR COMPLETO
BRANCA
DEPUTADO
-751
-0.9901773
58
BARROS MUNHOZ
PSDB
86372
87494
MASCULINO
SUPERIOR COMPLETO
BRANCA
DEPUTADO
-1122
-1.2823736
63
EDNA MACEDO
REP
82932
84144
FEMININO
ENSINO MÉDIO COMPLETO
BRANCA
DEPUTADO
-1212
-1.4403879
64
CARUSO
MDB
82209
83758
MASCULINO
SUPERIOR COMPLETO
BRANCA
DEPUTADO
-1549
-1.8493756
73
RAFA ZIMBALDI
CID
76910
80789
MASCULINO
SUPERIOR INCOMPLETO
BRANCA
EMPRESÁRIO
-3879
-4.8013962
32
EDMIR CHEDID
UNIÃO
129097
135991
MASCULINO
SUPERIOR COMPLETO
BRANCA
DEPUTADO
-6894
-5.0694531
81
MARIA LUCIA AMARY
PSDB
66956
70743
FEMININO
SUPERIOR COMPLETO
BRANCA
DEPUTADO
-3787
-5.3531798
12
GIL DINIZ
PL
196215
214037
MASCULINO
SUPERIOR INCOMPLETO
BRANCA
DEPUTADO
-17822
-8.3265977
68
DANIEL SOARES
UNIÃO
81753
97330
MASCULINO
SUPERIOR COMPLETO
BRANCA
ADVOGADO
-15577
-16.0043152
55
ANALICE FERNANDES
PSDB
90135
110089
FEMININO
SUPERIOR COMPLETO
BRANCA
ENFERMEIRO
-19954
-18.1253350
41
MONICA DO MOVIMENTO PRETAS
PSOL
106781
149844
FEMININO
SUPERIOR COMPLETO
PRETA
JORNALISTA E REDATOR
-43063
-28.7385548
43
CAIO FRANÇA
PSB
105173
162166
MASCULINO
SUPERIOR COMPLETO
BRANCA
ADVOGADO
-56993
-35.1448516
77
ALEX DE MADUREIRA
PL
74340
118294
MASCULINO
SUPERIOR INCOMPLETO
PARDA
DEPUTADO
-43954
-37.1565760